package com.rein.study.designpattern.builder._01singleton;

/**
 * 静态内部类模式
 */
public class InnerStaticSingleton {
    //构造函数私有化
    private InnerStaticSingleton() {
    }

    //对外提供实例访问，通过访问内部类的静态变量的方式
    public InnerStaticSingleton getInsance() {
        return Inner.instance;
    }

    // 定义内部静态类，并定义静态的对象实例
    // 只有第一次调用getInstance方法时， 虚拟机才加载 Inner 并初始化instance ，
    // 只有一个线程可以获得对象的初始化锁，其他线程无法进行初始化，保证对象的唯一性
    private static class Inner {
        public static InnerStaticSingleton instance = new InnerStaticSingleton();
    }
}
